/*
 *  listeDownload.c
 *  peertopeer
 *
 *  Created by jihed kamkoum on 09/05/10.
 *  Copyright 2010 ENSEIRB. All rights reserved.
 *
 */

#include "listeDownload.h"




void init_listeDownload(ListeDownload *liste){

	liste->debut=NULL;
	liste->fin=NULL;
	liste->taille=0;
}



/*
 * copier la deuxieme variable dans la premiere
 */
void copierDownload(download *donnees1,download *donnees2){
	donnees1->port = donnees2->port;
	strcpy(donnees1->key, donnees2->key);
	strcpy(donnees1->ip, donnees2->ip);
	donnees1->pourcentage = donnees2->pourcentage;
	donnees1->size = donnees2->size;
}



int est_egaleDownload(download donnees1, download donnees2){

	if ((donnees1.port!=donnees2.port)&&(!strcmp(donnees1.ip,donnees2.ip))&&(!strcmp(donnees1.key,donnees2.key))) {
		return 1;
	} else {
		return 0;
	}
}


void insererDownload(ListeDownload *liste, download *donnees){

	EltListeDownload *nv;
	nv=malloc(sizeof(EltListeDownload));
	copierDownload(&(nv->donnees),donnees);
	if(liste->taille==0){
		nv->precedent=liste->debut;
		nv->suivant=liste->fin;
		liste->debut=nv;
		liste->fin=nv;
		liste->taille++;}
	else{
		nv->precedent=NULL;
		nv->suivant=liste->debut;
		liste->debut->precedent=nv;
		liste->debut=nv;
		liste->taille++;

	}
}


void supprimerDownload(ListeDownload *liste, download donnees){

	EltListeDownload *elt;
	elt=malloc(sizeof(EltListeDownload));
	elt=liste->debut;
	while(elt!=NULL){

		if(est_egaleDownload(elt->donnees,donnees)){

			if(elt==liste->debut){

				liste->debut=elt->suivant;
				liste->taille--;
				if(liste->taille >1){
					elt->suivant->precedent=NULL;
					elt->suivant=NULL;
				}
			}

			else if(elt==liste->fin){

				liste->fin->precedent->suivant=NULL;
				liste->fin=liste->fin->precedent;
				liste->taille--;


			}
			else{

				elt->suivant->precedent=elt->precedent;
				elt->precedent->suivant=elt->suivant;
				liste->taille--;

			}

			break;

		}


		else
			elt=elt->suivant;



	}

}

void supprimer_listeDownload(ListeDownload *l){

	if (l->taille!=0){
		EltListeDownload *elt;
		elt=malloc(sizeof(EltListeDownload));

		elt=l->debut;

		while(elt!=NULL){

			supprimerDownload(l,elt->donnees);
			elt=l->debut;
		}

	}

}


void modify_download(ListeDownload * l,download * down,int pourcentage){
	if (l->taille!=0){
		EltListeDownload *elt;
		elt=malloc(sizeof(EltListeDownload));
		elt=l->fin;
		while(elt!=NULL){
			if(!est_egaleDownload((elt->donnees), *down)){
				(elt->donnees).pourcentage = pourcentage;
			}
			elt=elt->precedent;
		}

	}


}
void afficher_listeDownload(ListeDownload * l){
	if (l->taille!=0){
		EltListeDownload *elt;
		elt=malloc(sizeof(EltListeDownload));
		elt=l->debut;
		while(elt!=l->fin){
			afficher_Download(&(elt->donnees));
			elt=elt->suivant;
		}
		afficher_Download(&(elt->donnees));
	}
	else printf("aucun telechargement en cours\n");
}
void afficher_Download(download * donnees){
	printf("downloading %s %s : %d (%d from %d )\n",donnees->key,donnees->ip,donnees->port,donnees->pourcentage,donnees->size);
}
